package wh.threadlocal;

/**
 * @author: wh(1835734390 @ qq.com)
 * @date: 2022/4/27 9:40
 * @description:第四种情况：有1000个任务，我们利用线程池去处理；同时，让这1000个任务，共享同一个SimpleDateFormat对象
 * @version:
 */
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadLocalNormalUsage03 {

    public String date(int seconds) {
        //seconds单位是秒，而Date()的参数要求是毫秒；所这儿乘1000了；
        //【这个返回的日期】=【1970.1.1 00:00:00】+【1000*seconds】；（PS：如果在东八区的话，就是【1970.1.1 08:00:00】）
        Date date = new Date(1000 * seconds);
        return dateFormat.format(date);
    }

    //定义时间显示格式
    static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    //创建一个线程池
    public static ExecutorService threadPool = Executors.newFixedThreadPool(10);


    //因为所有的线程都共用了同一个SimpleDateFormat对象（去处理数字，得到date），其就会发生线程安全问题；
    //由此，就想到是不是可以通过加锁的方式，来应对【不同线程使用同一个资
    // 源（这儿被公用的资源就是SimpleDateFormat对象）时的线程安全问题？】
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i <1000 ; i++) {
            int finalI = i;
            //然后，把任务放到线程池中；
            threadPool.submit(new Thread(new Runnable() {
                @Override
                public void run() {
                    String date = new ThreadLocalNormalUsage03().date(finalI);
                    System.out.println(date);
                }
            }));
        }
        threadPool.shutdown();//最后，记得把线程池给关闭
    }
}
